#!/bin/bash
# Inicializa el entorno de ejecución de la aplicación. Para poder inicializar el entorno se debe contar con todos los componentes del sistema instalados. En caso de no contar con alguno de los componentes la inicialización no se lleva a cabo.

#------------------------------------------------------------------------------------------------#
# Funciones auxiliares.
#------------------------------------------------------------------------------------------------#

source DemonioEnEjecucion.sh
source AmbienteInicializado.sh
LOG="./Grabar_L.sh Iniciar_B"


#------------------------------------------------------------------------------------------------#
# 0) Variables globales
#------------------------------------------------------------------------------------------------#

# Directorio del archivo de configuración.
export CONFDIR=$PWD/../conf

# Archivo de configuración.
ARCHCONF=$CONFDIR/Instalar_TP.conf

# PID del demonio 'Recibir_B'.
PID_DEM=0


#------------------------------------------------------------------------------------------------#
# 1) Inicializa el archivo de LOG.
#------------------------------------------------------------------------------------------------#

function InicializarLog() {
	export LOGDIR=`grep '^LOGDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export LOGEXT=`grep '^LOGEXT=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGEXT=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export LOGSIZE=`grep '^LOGSIZE=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGSIZE=\([^=]*\)=[^=]*=[^=]*$/\1/'`
}


#------------------------------------------------------------------------------------------------#
# 2) Verifica que la instalación esté completa.
# Debe existir el archivo de configuración y el mismo debe contar con la definición de:
# + Los directorios: BINDIR / MAEDIR / ARRIDIR / ACEPDIR / RECHDIR / REPODIR / PROCDIR / LOGDIR
# + Los parámetros: LOGEXT / LOGSIZE / DATASIZE
# Deben existir los archivos maestros, el archivo de disponibilidad y los comandos.
#------------------------------------------------------------------------------------------------#

# Verifica la existencia del archivo de configuración.
function VerificarArchivoConfiguracion() {
	local ERRORCODE=0
	if [ -f $CONFDIR/Instalar_TP.conf ]
	then
		echo "El archivo de configuración existe."
		$LOG I "El archivo de configuración existe."
	else
		echo "ERROR: El archivo de configuración no existe."
		$LOG SE "El archivo de configuración no existe."
		ERRORCODE=1
	fi
	return $ERRORCODE
}

#------------------------------------------------------------------------------------------------#

# Verifica la definición de los directorios.
function VerificarDirectorios() {
	local ERRORCODE=0

	# Estructura del archivo de configuración "VARIABLE=VALOR=USUARIO=FECHA"

	BINDIR=`grep '^BINDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^BINDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $BINDIR ]
	then
		echo "ERROR: El directorio de ejecutables no está definido correctamente."
		$LOG E "El directorio de ejecutables no está definido correctamente."
		ERRORCODE=1
	else
		echo "El directorio de ejecutables está correctamente definido."
		$LOG I "El directorio de ejecutables está correctamente definido."
	fi

	MAEDIR=`grep '^MAEDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^MAEDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $MAEDIR ]
	then
		echo "ERROR: El directorio de archivos maestros no está definido correctamente."
		$LOG E "El directorio de archivos maestros no está definido correctamente."
		ERRORCODE=1
	else
		echo "El directorio de archivos maestros está correctamente definido."
		$LOG I "El directorio de archivos maestros está correctamente definido."
	fi

	ARRIDIR=`grep '^ARRIDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^ARRIDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $ARRIDIR ]
	then
		echo "ERROR: El directorio de arribos no está definido correctamente."
		$LOG E "El directorio de arribos no está definido correctamente."
		ERRORCODE=1
	else
		echo "El directorio de arribos está correctamente definido."
		$LOG I "El directorio de arribos está correctamente definido."
	fi

	ACEPDIR=`grep '^ACEPDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^ACEPDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $ACEPDIR ]
	then
		echo "ERROR: El directorio de archivos aceptados no está definido correctamente."
		$LOG E "El directorio de archivos aceptados no está definido correctamente."
		ERRORCODE=1
	else
		echo "El directorio de archivos aceptados está correctamente definido."
		$LOG I "El directorio de archivos aceptados está correctamente definido."
	fi

	RECHDIR=`grep '^RECHDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^RECHDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $RECHDIR ]
	then
		echo "ERROR: El directorio de archivos rechazados no está definido correctamente."
		$LOG E "El directorio de archivos rechazados no está definido correctamente."
		ERRORCODE=1
	else
		echo "El directorio de archivos rechazados está correctamente definido."
		$LOG I "El directorio de archivos rechazados está correctamente definido."
	fi

	REPODIR=`grep '^REPODIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^REPODIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $REPODIR ]
	then
		echo "ERROR: El directorio de reportes no está definido correctamente."
		$LOG E "El directorio de reportes no está definido correctamente."
		ERRORCODE=1
	else
		echo "El directorio de reportes está correctamente definido."
		$LOG I "El directorio de reportes está correctamente definido."
	fi

	PROCDIR=`grep '^PROCDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^PROCDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $PROCDIR ]
	then
		echo "ERROR: El directorio de archivos procesados no está definido correctamente."
		$LOG E "El directorio de archivos procesados no está definido correctamente."
		ERRORCODE=1
	else
		echo "El directorio de archivos procesados está correctamente definido."
		$LOG I "El directorio de archivos procesados está correctamente definido."
	fi

	LOGDIR=`grep '^LOGDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $LOGDIR ]
	then
		echo "ERROR: El directorio de archivos de log no está definido correctamente."
		$LOG E "El directorio de archivos de log no está definido correctamente."
		ERRORCODE=1
	else
		echo "El directorio de archivos de log está correctamente definido."
		$LOG I "El directorio de archivos de log está correctamente definido."
	fi

	return $ERRORCODE
}

#------------------------------------------------------------------------------------------------#

# Verifica la definición de los parámetros.
function VerificarParametros() {
	local ERRORCODE=0

	LOGEXT=`grep '^LOGEXT=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGEXT=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ -z "$LOGEXT" ]
	then
		echo "ERROR: La extensión para los archivos de log no está configurada correctamente."
		$LOG E "La extensión para los archivos de log no está configurada correctamente."
		ERRORCODE=1
	else
		echo "La extensión para los archivos de log está correctamente configurada."
		$LOG I "La extensión para los archivos de log está correctamente configurada."
	fi

	LOGSIZE=`grep '^LOGSIZE=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGSIZE=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ -z "$LOGSIZE" ]
	then
		echo "ERROR: El tamaño máximo de los archivos de log no está configurado correctamente."
		$LOG E "El tamaño máximo de los archivos de log no está configurado correctamente."
		ERRORCODE=1
	else
		echo "El tamaño máximo de los archivos de log está correctamente configurado."
		$LOG I "El tamaño máximo de los archivos de log está correctamente configurado."
	fi

	DATASIZE=`grep '^DATASIZE=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^DATASIZE=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ -z "$DATASIZE" ]
	then
		echo "ERROR: El espacio libre mínimo para arribos no está configurado correctamente."
		$LOG E "El espacio libre mínimo para arribos no está configurado correctamente."
		ERRORCODE=1
	else
		echo "El espacio libre mínimo para arribos está correctamente configurado."
		$LOG I "El espacio libre mínimo para arribos está correctamente configurado."
		export DATASIZE
	fi

	return $ERRORCODE
}

#------------------------------------------------------------------------------------------------#

# Verifica la existencia de los archivos maestros.
function VerificarExistenciaArchivosMaestros() {
	local ERRORCODE=0

	if [ -f $MAEDIR/salas.mae ]
	then
		echo "El archivo maestro 'salas.mae' existe."
		$LOG I "El archivo maestro 'salas.mae' existe."
	else
		echo "ERROR: El archivo maestro 'salas.mae' no existe."
		$LOG E "El archivo maestro 'salas.mae' no existe."
		ERRORCODE=1
	fi

	if [ -f $MAEDIR/obras.mae ]
	then
		echo "El archivo maestro 'obras.mae' existe."
		$LOG I "El archivo maestro 'obras.mae' existe."
	else
		echo "ERROR: El archivo maestro 'obras.mae' no existe."
		$LOG E "El archivo maestro 'obras.mae' no existe."
		ERRORCODE=1
	fi

	return $ERRORCODE
}

#------------------------------------------------------------------------------------------------#

# Verifica la existencia del archivo de disponibilidad.
function VerificarExistenciaArchivoDisponibilidad() {
	local ERRORCODE=0

	if [ -f $PROCDIR/combos.dis ]
	then
		echo "El archivo de disponibilidad 'combos.dis' existe."
		$LOG I "El archivo de disponibilidad 'combos.dis' existe."
	else
		echo "ERROR: El archivo de disponibilidad 'combos.dis' no existe."
		$LOG E "El archivo de disponibilidad 'combos.dis' no existe."
		ERRORCODE=1
	fi

	return $ERRORCODE
}

#------------------------------------------------------------------------------------------------#

# Verifica la existencia de los comandos:
# "Recibir_B", "Reservar_B", "Imprimir_B", "Mover_B", "Grabar_L", "Start_D", "Stop_D"
function VerificarExistenciaComandos() {
	local ERRORCODE=0

	if [ -f $BINDIR/Recibir_B.sh ]
	then
		echo "El comando Recibir_B.sh está correctamente instalado."
		$LOG I "El comando Recibir_B.sh está correctamente instalado."
	else
		echo "ERROR: El comando Recibir_B.sh no se instaló correctamente."
		$LOG E "El comando Recibir_B.sh no se instaló correctamente."
		ERRORCODE=1
	fi

	if [ -f $BINDIR/Reservar_B.sh ]
	then
		echo "El comando Reservar_B.sh está correctamente instalado."
		$LOG I "El comando Reservar_B.sh está correctamente instalado."
	else
		echo "ERROR: El comando Reservar_B.sh no se instaló correctamente."
		$LOG E "El comando Reservar_B.sh no se instaló correctamente."
		ERRORCODE=1
	fi

	if [ -f $BINDIR/Imprimir_B.pl ]
	then
		echo "El comando Imprimir_B.pl está correctamente instalado."
		$LOG I "El comando Imprimir_B.pl está correctamente instalado."
	else
		echo "ERROR: El comando Imprimir_B.pl no se instaló correctamente."
		$LOG E "El comando Imprimir_B.pl no se instaló correctamente."
		ERRORCODE=1
	fi

	if [ -f $BINDIR/Mover_B.sh ]
	then
		echo "El comando Mover_B.sh está correctamente instalado."
		$LOG I "El comando Mover_B.sh está correctamente instalado."
	else
		echo "ERROR: El comando Mover_B.sh no se instaló correctamente."
		$LOG E "El comando Mover_B.sh no se instaló correctamente."
		ERRORCODE=1
	fi

	if [ -f $BINDIR/Grabar_L.sh ]
	then
		echo "El comando Grabar_L.sh está correctamente instalado."
		$LOG I "El comando Grabar_L.sh está correctamente instalado."
	else
		echo "ERROR: El comando Grabar_L.sh no se instaló correctamente."
		$LOG E "El comando Grabar_L.sh no se instaló correctamente."
		ERRORCODE=1
	fi

	if [ -f $BINDIR/Start_D.sh ]
	then
		echo "El comando Start_D.sh está correctamente instalado."
		$LOG I "El comando Start_D.sh está correctamente instalado."
	else
		echo "ERROR: El comando Start_D.sh no se instaló correctamente."
		$LOG E "El comando Start_D.sh no se instaló correctamente."
		ERRORCODE=1
	fi

	if [ -f $BINDIR/Stop_D.sh ]
	then
		echo "El comando Stop_D.sh está correctamente instalado."
		$LOG I "El comando Stop_D.sh está correctamente instalado."
	else
		echo "ERROR: El comando Stop_D.sh no se instaló correctamente."
		$LOG E "El comando Stop_D.sh no se instaló correctamente."
		ERRORCODE=1
	fi

	if [ -f $BINDIR/DemonioEnEjecucion.sh ]
	then
		echo "El comando DemonioEnEjecucion.sh está correctamente instalado."
		$LOG I "El comando DemonioEnEjecucion.sh está correctamente instalado."
	else
		echo "ERROR: El comando DemonioEnEjecucion.sh no se instaló correctamente."
		$LOG E "El comando DemonioEnEjecucion.sh no se instaló correctamente."
		ERRORCODE=1
	fi

	if [ -f $BINDIR/AmbienteInicializado.sh ]
	then
		echo "El comando AmbienteInicializado.sh está correctamente instalado."
		$LOG I "El comando AmbienteInicializado.sh está correctamente instalado."
	else
		echo "ERROR: El comando AmbienteInicializado.sh no se instaló correctamente."
		$LOG E "El comando AmbienteInicializado.sh no se instaló correctamente."
		ERRORCODE=1
	fi

	return $ERRORCODE
}

#------------------------------------------------------------------------------------------------#

# Verifica que la instalación sea completa.
function VerificarInstalacionCompleta() {
	local ERRORCODE=0

	VerificarArchivoConfiguracion
	if [ $? -eq 1 ]
	then
		ERRORCODE=1
	else
		VerificarDirectorios
		if [ $? -eq 1 ]
		then
			ERRORCODE=1
		else
			VerificarParametros
			if [ $? -eq 1 ]
			then
				ERRORCODE=1
			else
				VerificarExistenciaArchivosMaestros
				if [ $? -eq 1 ]
				then
					ERRORCODE=1
				else
					VerificarExistenciaArchivoDisponibilidad
					if [ $? -eq 1 ]
					then
						ERRORCODE=1
					else
						VerificarExistenciaComandos
						if [ $? -eq 1 ]
						then
							ERRORCODE=1
						fi
					fi
				fi
			fi
		fi
	fi

	return $ERRORCODE
}


#------------------------------------------------------------------------------------------------#
# 3) Verifica si el ambiente ya ha sido inicializado.
#------------------------------------------------------------------------------------------------#

# Verifica si ya se ejecutó Iniciar_B en esta sesión
function VerificarEjecucionPrevia() {
	if [ $EJECUTADO -eq 1 ]
	then
		return 1
	else
		return 0
	fi
}

#------------------------------------------------------------------------------------------------#
# 4) Setea el PATH, las variables de ambiente y los permisos de los archivos.
#------------------------------------------------------------------------------------------------#

# Setea la variable PATH
function SetearPath() {
	export PATH=$PATH:$BINDIR
	echo "El directorio de ejecutables $BINDIR fue agregado al PATH."
	$LOG I "El directorio de ejecutables $BINDIR fue agregado al PATH."
}

#------------------------------------------------------------------------------------------------#

# Setea las variables de ambiente:
# BINDIR, MAEDIR, ARRIDIR, ACEPDIR, RECHDIR, REPODIR, PROCDIR, LOGDIR, LOGEXT, LOGSIZE, DATASIZE
function SetearVariablesAmbiente() {
	export GRUPO=04
	export BINDIR=`grep '^BINDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^BINDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export MAEDIR=`grep '^MAEDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^MAEDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export ARRIDIR=`grep '^ARRIDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^ARRIDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export ACEPDIR=`grep '^ACEPDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^ACEPDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export RECHDIR=`grep '^RECHDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^RECHDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export REPODIR=`grep '^REPODIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^REPODIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export PROCDIR=`grep '^PROCDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^PROCDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export LOGDIR=`grep '^LOGDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export LOGEXT=`grep '^LOGEXT=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGEXT=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export LOGSIZE=`grep '^LOGSIZE=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGSIZE=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	export DATASIZE=`grep '^DATASIZE=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^DATASIZE=\([^=]*\)=[^=]*=[^=]*$/\1/'`
}

#------------------------------------------------------------------------------------------------#

# Verifica los permisos de los archivos maestros: "salas.mae" y "obras.mae"
# Si no son los adecuados los modifica.
function VerificarPermisosArchivosMaestros() {
	if [ -r $MAEDIR/salas.mae ]
	then
		echo "El archivo maestro 'salas.mae' tiene los permisos adecuados."
		$LOG I "El archivo maestro 'salas.mae' tiene los permisos adecuados."
	else
		echo "El archivo maestro 'salas.mae' no tiene permiso de lectura."
		echo "Agregando permiso de lectura al archivo salas.mae..."
		$LOG W "El archivo maestro 'salas.mae' no tiene permiso de lectura."
		$LOG I "Se agregaron permisos de lectura al archivo salas.mae."
		chmod +r $MAEDIR/salas.mae
	fi

	if [ -r $MAEDIR/obras.mae ]
	then
		echo "El archivo maestro 'obras.mae' tiene los permisos adecuados."
		$LOG I "El archivo maestro 'obras.mae' tiene los permisos adecuados."
	else
		echo "El archivo maestro 'obras.mae' no tiene permiso de lectura."
		echo "Agregando permiso de lectura al archivo 'obras.mae'..."
		$LOG W "El archivo maestro 'obras.mae' no tiene permiso de lectura."
		$LOG I "Se agregaron permisos de lectura al archivo obras.mae."
		chmod +r $MAEDIR/obras.mae
	fi
}

#------------------------------------------------------------------------------------------------#

# Verifica los permisos del archivo de disponibilidad: "combos.dis"
# Si no son los adecuados los modifica.
function VerificarPermisosArchivoDisponibilidad() {
	if [ -r $PROCDIR/combos.dis ]
	then
		echo "El archivo de disponibilidad 'combos.dis' tiene los permisos adecuados."
		$LOG I "El archivo de disponibilidad 'combos.dis' tiene los permisos adecuados."
	else
		echo "El archivo de disponibilidad 'combos.dis' no tiene permiso de lectura."
		echo "Agregando permiso de lectura al archivo 'combos.dis'..."
		$LOG W "El archivo de disponibilidad 'combos.dis' no tiene permiso de lectura."
		$LOG I "Se agregaron permisos de lectura al archivo combos.dis."
		chmod +w $PROCDIR/combos.dis
	fi
}

#------------------------------------------------------------------------------------------------#

# Verifica los permisos de los comandos:
# "Recibir_B", "Reservar_B", "Imprimir_B", "Mover_B", "Grabar_L", "Start_D", "Stop_D"
# Si no son los adecuados los modifica.
function VerificarPermisosComandos() {
	if [ -x $BINDIR/Recibir_B.sh ]
	then
		echo "El comando Recibir_B.sh tiene los permisos adecuados."
		$LOG I "El comando Recibir_B.sh tiene los permisos adecuados."
	else
		echo "ERROR: El comando Recibir_B.sh no tiene permiso de ejecución."
		echo "Agregando permiso de ejecución al comando Recibir_B.sh..."
		$LOG W "El comando Recibir_B.sh no tiene permiso de ejecución."
		$LOG I "Se agregaron permisos de ejecución al comando Recibir_B.sh."
		chmod +x $BINDIR/Recibir_B.sh
	fi

	if [ -x $BINDIR/Iniciar_B.sh ]
	then
		echo "El comando Iniciar_B.sh tiene los permisos adecuados."
		$LOG I "El comando Iniciar_B.sh tiene los permisos adecuados."
	else
		echo "ERROR: El comando Iniciar_B.sh no tiene permiso de ejecución."
		echo "Agregando permiso de ejecución al comando Iniciar_B.sh..."
		$LOG W "El comando Iniciar_B.sh no tiene permiso de ejecución."
		$LOG I "Se agregaron permisos de ejecución al comando Iniciar_B.sh."
		chmod +x $BINDIR/Iniciar_B.sh
	fi

	if [ -x $BINDIR/Reservar_B.sh ]
	then
		echo "El comando Reservar_B.sh tiene los permisos adecuados."
		$LOG I "El comando Reservar_B.sh tiene los permisos adecuados."
	else
		echo "ERROR: El comando Reservar_B.sh no tiene permiso de ejecución."
		echo "Agregando permiso de ejecución al comando Reservar_B.sh..."
		$LOG W "El comando Reservar_B.sh no tiene permiso de ejecución."
		$LOG I "Se agregaron permisos de ejecución al comando Reservar_B.sh."
		chmod +x $BINDIR/Reservar_B.sh
	fi

	if [ -x $BINDIR/Imprimir_B.pl ]
	then
		echo "El comando Imprimir_B.pl tiene los permisos adecuados."
		$LOG I "El comando Imprimir_B.pl tiene los permisos adecuados."
	else
		echo "ERROR: El comando Imprimir_B.pl no tiene permiso de ejecución."
		echo "Agregando permiso de ejecución al comando Imprimir_B.pl..."
		$LOG W "El comando Imprimir_B.pl no tiene permiso de ejecución."
		$LOG I "Se agregaron permisos de ejecución al comando Imprimir.pl."
		chmod +x $BINDIR/Imprimir_B.pl
	fi

	if [ -x $BINDIR/Mover_B.sh ]
	then
		echo "El comando Mover_B.sh tiene los permisos adecuados."
		$LOG I "El comando Mover_B.sh tiene los permisos adecuados."
	else
		echo "ERROR: El comando Mover_B.sh no tiene permiso de ejecución."
		echo "Agregando permiso de ejecución al comando Mover_B.sh..."
		$LOG W "El comando Mover_B.sh no tiene permiso de ejecución."
		$LOG I "Se agregaron permisos de ejecución al comando Mover_B.sh."
		chmod +x $BINDIR/Mover_B.sh
	fi

	if [ -x $BINDIR/Grabar_L.sh ]
	then
		echo "El comando Grabar_L.sh tiene los permisos adecuados."
		$LOG I "El comando Grabar_L.sh tiene los permisos adecuados."
	else
		echo "ERROR: El comando Grabar_L.sh no tiene permiso de ejecución."
		echo "Agregando permiso de ejecución al comando Grabar_L.sh..."
		$LOG W "El comando Grabar_L.sh no tiene permiso de ejecución."
		$LOG I "Se agregaron permisos de ejecución al comando Grabar_L.sh."
		chmod +x $BINDIR/Grabar_L.sh
	fi

	if [ -x $BINDIR/Start_D.sh ]
	then
		echo "El comando Start_D.sh tiene los permisos adecuados."
		$LOG I "El comando Start_D.sh tiene los permisos adecuados."
	else
		echo "ERROR: El comando Start_D.sh no tiene permiso de ejecución."
		echo "Agregando permiso de ejecución al comando Start_D.sh..."
		$LOG W "El comando Start_D.sh no tiene permiso de ejecución."
		$LOG I "Se agregaron permisos de ejecución al comando Start_D.sh."
		chmod +x $BINDIR/Start_D.sh
	fi

	if [ -x $BINDIR/Stop_D.sh ]
	then
		echo "El comando Stop_D.sh tiene los permisos adecuados."
		$LOG I "El comando Stop_D.sh tiene los permisos adecuados."
	else
		echo "ERROR: El comando Stop_D.sh no tiene permiso de ejecución."
		echo "Agregando permiso de ejecución al comando Stop_D.sh..."
		$LOG W "El comando Stop_D.sh no tiene permiso de ejecución."
		$LOG I "Se agregaron permisos de ejecución al comando Stop_D.sh."
		chmod +x $BINDIR/Stop_D.sh
	fi

	if [ -x $BINDIR/DemonioEnEjecucion.sh ]
	then
		echo "El comando DemonioEnEjecucion.sh tiene los permisos adecuados."
		$LOG I "El comando DemonioEnEjecucion.sh tiene los permisos adecuados."
	else
		echo "ERROR: El comando DemonioEnEjecucion.sh no tiene permiso de ejecución."
		echo "Agregando permiso de ejecución al comando DemonioEnEjecucion.sh..."
		$LOG W "El comando DemonioEnEjecucion.sh no tiene permiso de ejecución."
		$LOG I "Se agregaron permisos de ejecución al comando DemonioEnEjecucion.sh."
		chmod +x $BINDIR/DemonioEnEjecucion.sh
	fi

	if [ -x $BINDIR/AmbienteInicializado.sh ]
	then
		echo "El comando AmbienteInicializado.sh tiene los permisos adecuados."
		$LOG I "El comando AmbienteInicializado.sh tiene los permisos adecuados."
	else
		echo "ERROR: El comando AmbienteInicializado.sh no tiene permiso de ejecución."
		echo "Agregando permiso de ejecución al comando AmbienteInicializado.sh..."
		$LOG W "El comando AmbienteInicializado.sh no tiene permiso de ejecución."
		$LOG I "Se agregaron permisos de ejecución al comando AmbienteInicializado.sh."
		chmod +x $BINDIR/AmbienteInicializado.sh
	fi
}


#------------------------------------------------------------------------------------------------#
# 5) Permite decidir si se inicia el demonio "Recibir_B".
#------------------------------------------------------------------------------------------------#

# Permite iniciar el demonio en background o realizarlo más adelante.
function IniciarDemonio() {
	echo "¿Desea iniciar la ejecución del demonio Recibir_B? S/N"
	read opcion

	while [ $opcion != 'S' -a $opcion != 's' -a $opcion != 'N' -a $opcion != 'n' ]
	do
		echo "Opción no reconocida."
		echo "Ingrese 'S' si desea iniciar la ejecución del demonio o 'N' en caso contrario."
		read opcion
	done

	if [ $opcion == 'S' -o $opcion == 's' ]
	then
		# Determina si Recibir_B se está ejecutando
		DemonioEnEjecucion
		if [ $? -ne 0 ]
		then
			echo "El demonio Recibir_B ya está en ejecución. No puede volver a lanzarlo."
			$LOG W "Eligió iniciar la ejecución del demonio Recibir_B pero ya hay una instancia en ejecución."
		else
			# ejecuta Recibir_B en background y guarda su PID (lo obtiene de la variable $!)
			$BINDIR/Recibir_B.sh &
			PID_DEM=$!
			echo "Eligió iniciar el demonio"
			echo "El PID es: $PID_DEM"
			echo "Para detenerlo utilice el comando Stop_D.sh"
			$LOG I "Se inició la ejecución del demonio Recibir_B bajo el PID $PID_DEM."
		fi
	else
		echo "Eligió no iniciar el demonio."
		echo "Para iniciarlo más tarde utilice el comando Start_D.sh"
	fi
}


#------------------------------------------------------------------------------------------------#
# 6) Muestra el contenido de las variables de entorno, PID del demonio y estado del sistema.
#------------------------------------------------------------------------------------------------#

function MostrarEstadoSistema() {
	echo "--------------------------------------------------------------"
	echo "TP SO7508 Segundo Cuatrimestre 2013. Tema B Copyright Grupo 04"
	echo "--------------------------------------------------------------"
	echo "Librería del Sistema: $CONFDIR"
	ls $CONFDIR
	echo "--------------------------------------------------------------"
	echo "Ejecutables: $BINDIR"
	ls $BINDIR
	echo "--------------------------------------------------------------"
	echo "Archivos Maestros: $MAEDIR"
	ls $MAEDIR
	echo "--------------------------------------------------------------"
	echo "Directorio de arribo de archivos externos: $ARRIDIR"
	echo "Archivos externos aceptados: $ACEPDIR"
	echo "Archivos externos rechazados: $RECHDIR"
	echo "Reportes de salida: $REPODIR"
	echo "Archivos procesados: $PROCDIR"
	echo "Logs de auditoría del Sistema: $LOGDIR/<comando>.$LOGEXT"

#	DemonioEnEjecucion
#	if [ $? -eq 0 ]
#	then
#		echo "Demonio corriendo bajo el PID Nº $PID_DEM"
#	else
#		echo "Demonio no está en ejecución"
#	fi

	echo "Estado del Sistema: INICIALIZADO"
	echo "--------------------------------------------------------------"
}


#------------------------------------------------------------------------------------------------#
# Principal.
#------------------------------------------------------------------------------------------------#

clear
echo "Iniciando el ambiente de ejecución"
echo "----------------------------------"

InicializarLog

# Verifica que el comando no se haya ejecutado anteriormente. Si se ejecutó se informa y se termina la ejecución.
AmbienteInicializado
if [ $? -ne 1 ]
then
	# Verifica que la instalación esté completa. Si no lo está termina la ejecución.
	VerificarInstalacionCompleta

	if [ $? -eq 1 ]
	then
		# Si la instalación no está completa informa el problema y finaliza la ejecución.
		echo "La instalación del sistema no está completa. Por favor, lea los mensajes de error generados y vuelva a ejecutar el comando Instalar_TP.sh"
		$LOG SE "La instalación del sistema no está completa."
		# Setea la variable que indica que el comando ya fue ejecutado durante la sesión actual de manera que permita una nueva ejecución, dado que no concluyó exitosamente.
		export EJECUTADO=0
	else
		# Si la instalación está completa setea el PATH, las variables de ambiente y los permisos de archivos y comandos.
		SetearPath
		SetearVariablesAmbiente
		VerificarPermisosArchivosMaestros
		VerificarPermisosArchivoDisponibilidad
		VerificarPermisosComandos
		# Da la opción de iniciar la ejecución del demonio.
		IniciarDemonio
		# Muestra el estado del sistema.
		MostrarEstadoSistema
		# Setea la variable que indica que el comando ya fue ejecutado durante la sesión actual.
		export EJECUTADO=1
	fi

else
	echo "ERROR: Ambiente ya inicializado. Si quiere reiniciar termine su sesión e ingrese nuevamente."
	$LOG E "El ambiente ya fue inicializado en esta sesión de ususario."
fi

#------------------------------------------------------------------------------------------------#

